word pattern algorithm